package com.demo.file.utils;

import java.util.Base64;

/**
 * Base64编码解码工具类
 */
public class Base64Utils {

    /**
     * 将字节数组编码为Base64字符串
     *
     * @param data 待编码的字节数组
     * @return Base64编码后的字符串
     */
    public static String encode(byte[] data) {
        if (data == null) {
            return null;
        }
        return Base64.getEncoder().encodeToString(data);
    }

    /**
     * 将Base64字符串解码为字节数组
     *
     * @param base64Str Base64编码的字符串
     * @return 解码后的字节数组
     */
    public static byte[] decode(String base64Str) {
        if (base64Str == null || base64Str.isEmpty()) {
            return null;
        }
        return Base64.getDecoder().decode(base64Str);
    }

    /**
     * 检查字符串是否为有效的Base64格式
     *
     * @param str 待检查的字符串
     * @return 是否为有效的Base64格式
     */
    public static boolean isValidBase64(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        // Base64字符串长度必须是4的倍数
        if (str.length() % 4 != 0) {
            return false;
        }
        // 检查是否只包含Base64允许的字符
        return str.matches("^[A-Za-z0-9+/]*={0,2}$");
    }

    /**
     * 主方法，用于测试将resource/pdf目录下的文件转换为Base64编码
     */
    public static void main(String[] args) {
        extracted();
    }

    public static String extracted() {
        return extracted1();
    }

    private static String extracted1() {
        try {
            // 指定resource/pdf目录下的PDF文件名
//            String fileName = "服務協議.pdf"; // 请替换为实际存在的PDF文件名
//            String filePath = "src/main/resources/pdf/" + fileName;
            String filePath = "D:\\allProject\\com-springcloud-demo\\com-springcloud-file\\src\\main\\resources\\pdf\\服務協議.pdf";
            // 读取文件内容
            java.nio.file.Path path = java.nio.file.Paths.get(filePath);
            if (!java.nio.file.Files.exists(path)) {
                System.out.println("文件不存在: " + filePath);
                return null;
            }

            byte[] fileBytes = java.nio.file.Files.readAllBytes(path);
            System.out.println("文件大小: " + fileBytes.length + " 字节");

            // 转换为Base64编码
            String base64Str = encode(fileBytes);
            System.out.println("Base64编码结果: ");
            // 只打印前100个字符，避免输出过长
            if (base64Str != null && base64Str.length() > 100) {
                System.out.println(base64Str);
                //System.out.println(base64Str.substring(0, 100) + "...");
            } else {
                System.out.println(base64Str);
            }

            // 验证编码结果
            boolean isValid = isValidBase64(base64Str);
            System.out.println("Base64编码验证: " + (isValid ? "有效" : "无效"));
            return base64Str;
        } catch (Exception e) {
            System.out.println("处理文件时出错: " + e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

}